package com.mkz.jbpm.config;

import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.delegate.event.ActivitiEventListener;
import org.activiti.engine.impl.persistence.StrongUuidGenerator;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * @Description: 流程引擎配置服务中心
 * @Author: XXXXXX
 * @Date: 2020/4/2 15:56
 * @Version 1.0
 */
@Configuration
@EnableTransactionManagement
@MapperScan("com.mkz.jbpm.mapper")
public class ActivitiConfig implements ProcessEngineConfigurationConfigurer {

    @Autowired
    private DataSource dataSource;
    @Autowired
    private EventListener eventListener;

//    /**
//     * 初始化配置，创建流程引擎表
//     *
//     * @return
//     */
//    @Bean
//    public StandaloneProcessEngineConfiguration processEngineConfiguration() {
//        StandaloneProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration();
//        configuration.setDataSource(dataSource);
//        // 设置是否自动更新
//        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//        configuration.setAsyncExecutorActivate(false);
//
//        //configuration.setCustomMybatisMappers(Collections.singleton(ProcessMapper.class));
//        //configuration.setActiviti5CustomMybatisXMLMappers(Collections.singleton("classpath:mapper/ProcessMapper.xml"));
//        // 注册全局监听器
//        List<ActivitiEventListener>  activitiEventListener=new ArrayList<>();
//        activitiEventListener.add(eventListener );
//        configuration.setEventListeners(activitiEventListener);
//        return configuration;
//    }

    @Override
    public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
    	processEngineConfiguration.setDataSource(dataSource);
        // 设置是否自动更新
    	processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
    	processEngineConfiguration.setAsyncExecutorActivate(false);
        // 注册全局监听器
        List<ActivitiEventListener>  activitiEventListener=new ArrayList<>();
        activitiEventListener.add(eventListener );
        processEngineConfiguration.setEventListeners(activitiEventListener);
        
        processEngineConfiguration.setActivityFontName("宋体");
        processEngineConfiguration.setLabelFontName("宋体");
        processEngineConfiguration.setAnnotationFontName("宋体");
        StrongUuidGenerator uuidGenerator = new StrongUuidGenerator();
        processEngineConfiguration.setIdGenerator(uuidGenerator);
    }

//    /**
//     * 初始化配置，创建流程引擎表
//     *
//     * @return
//     */
//    @Bean
//    public ProcessEngine getProcessEngine() {
//        return processEngineConfiguration().buildProcessEngine();
//    }

//    /**
//     * 流程部署和流程定义服务
//     *
//     * @return
//     */
//    @Bean
//    public RepositoryService getRepositoryService() {
//        return getProcessEngine().getRepositoryService();
//    }
//
//    /**
//     * 流程运行时对流程实例进行管理与控制服务
//     *
//     * @return
//     */
//    @Bean
//    public RuntimeService getRuntimeService() {
//        return getProcessEngine().getRuntimeService();
//    }
//
//    /**
//     * 表单服务
//     *
//     * @return
//     */
//    @Bean
//    public FormService getFormService() {
//        return getProcessEngine().getFormService();
//    }
//
//    /**
//     * 对流程任务进行管理，例如任务提醒、任务完成和创建任务等
//     *
//     * @return
//     */
//    @Bean
//    public TaskService getTaskService() {
//        return getProcessEngine().getTaskService();
//    }
//
//    /**
//     * 对流程的历史数据进行操作，包括查询、删除这些历史数据
//     *
//     * @return
//     */
//    @Bean
//    public HistoryService getHistoryService() {
//        return getProcessEngine().getHistoryService();
//    }
//
//    /**
//     * 提供对流程角色数据进行管理的API，这些角色数据包括用户组、用户及它们之间的关系
//     *
//     * @return
//     */
//    @Bean
//    public IdentityService getIdentityService() {
//        return getProcessEngine().getIdentityService();
//    }
//
//    /**
//     * 提供对流程引擎进行管理和维护的服务
//     *
//     * @return
//     */
//    @Bean
//    public ManagementService getManagementService() {
//        return getProcessEngine().getManagementService();
//    }

}
